package com.yellowcong.bos.demo;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.net.URL;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.UUID;

import com.baidubce.auth.DefaultBceCredentials;
import com.baidubce.services.bos.BosClient;
import com.baidubce.services.bos.BosClientConfiguration;
import com.baidubce.services.bos.model.BosObjectSummary;
import com.baidubce.services.bos.model.BucketSummary;
import com.baidubce.services.bos.model.CreateBucketResponse;
import com.baidubce.services.bos.model.PutObjectResponse;

/**
 * 创建日期:2018/01/08<br/>
 * 创建时间:15:16:05<br/>
 * 创建用户:yellowcong<br/>
 * 机能概要:
 */
public class Demo1 {
	private static String ACCESS_KEY_ID = "838b9ee702504905878a195cfa20beb9"; // 用户的Access Key ID
	private static  String SECRET_ACCESS_KEY = "ac23664bdf4144cb9d94675b556307f5"; // 用户的Secret Access Key
	private static BosClient client = null;
	
	static {
		
		// 初始化一个BosClient
		BosClientConfiguration config = new BosClientConfiguration();
		config.setCredentials(new DefaultBceCredentials(ACCESS_KEY_ID, SECRET_ACCESS_KEY));
		client = new BosClient(config);
	}
	
	
	public static void main(String[] args) throws Exception {
			
		//打印bucket信息
//		printBucketInfo();
		
		//创建bucket
//		createBucket("zhangdoubi");
		//删除bueckt
//		deleteBucket("zhangdoubi");
		
//		printBucketInfo();
		String bucketNm = "zhangdoubi";
//		createBucket(bucketNm);
		
		
		//上传文件
		String path = Demo1.class.getClassLoader().getResource("").getFile();
		
		//图片地址
		path = new File(path).getParent()+File.separator+"pic\\20180107232149877.gif";

		//绝对路径
		String absPath = new File(path).getAbsolutePath();
		
		//文件上传
		//upload(bucketNm,absPath);
		
		//获取bucket信息
//		getBucketFiels(bucketNm);
		
		//删除boejct
		delObject(bucketNm,"fdasfas");
		
		
		
		//51dcf30d-9ed2-473e-9828-0741c56eb4cf.gif
		
		//
		getBucketFiels(bucketNm);
		
		//网络访问地址
		String webUrl = getObjectPath(bucketNm,"51dcf30d-9ed2-473e-9828-0741c56eb4cf.gif");
		System.out.println(webUrl);
	}
	/**
	 * 创建日期:2018/01/08<br/>
	 * 创建时间:16:50:18<br/>
	 * 创建用户:yellowcong<br/>
	 * 机能概要:获取访问路径，这个设置了超时时间，不是永久的
	 * @param bucketNm
	 * @param key
	 * @return
	 */
	public static String getObjectPath(String bucketNm,String key) {

		   URL url = client.generatePresignedUrl(bucketNm, key, 20000);
		   //指定用户需要获取的Object所在的Bucket名称、该Object名称、时间戳、URL的有效时长   

		   return url.toString();
	}
	/**
	 * 创建日期:2018/01/08<br/>
	 * 创建时间:16:40:41<br/>
	 * 创建用户:yellowcong<br/>
	 * 机能概要:删除bucket里面的文件
	 * @param bucketNm 名称
	 * @param key 删除的问价名称
	 * @return
	 */
	public static boolean delObject(String bucketNm,String key) {
		try {
			client.deleteObject(bucketNm, key);
			return true;
		} catch (Exception e) {
			e.printStackTrace();
			return false;
		}
	}
	/**
	 * 创建日期:2018/01/08<br/>
	 * 创建时间:16:36:54<br/>
	 * 创建用户:yellowcong<br/>
	 * 机能概要:获取一个Bucket 里面所有的文件
	 * @param bucketNm  bueckt的名称
	 * @return
	 */
	public static List<String> getBucketFiels(String bucketNm){
		//获取文件信息
		List<BosObjectSummary> bosObjs = client.listObjects(bucketNm).getContents();
		List<String> files = null;
		
		SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd hh:mm:ss");
		if(bosObjs != null && bosObjs.size() > 0) {
			System.out.printf("记录条数:%d\r\n",bosObjs.size());
			
			files =  new ArrayList<String>(bosObjs.size());
			
			//获取bos的信息
			for(BosObjectSummary obj:bosObjs) {
				String key = obj.getKey();
				Date date = obj.getLastModified();
				System.out.printf("[%s]: %s\r\n",format.format(date),key);
				
				//添加文件名到集合中
				files.add(key);
			}
		}
		
		return files;
	}
		
    /**
     * 通过老文件的名称自动生成新的文件
     * @param oldName 
     * @return
     */
    public static String newName(String oldName){
        String [] datas = oldName.split("\\.");
        String type = datas[datas.length-1];
        String newName  = UUID.randomUUID().toString()+"."+type;
        return newName;
    }
    
	/**
	 * 创建日期:2018/01/08<br/>
	 * 创建时间:16:14:05<br/>
	 * 创建用户:yellowcong<br/>
	 * 机能概要:文件上传
	 * @param bucketNm bucket名称
	 * @param filePath 文件路径
	 * @return 上传后的文件的名称
	 */
	public static String upload(String bucketNm,String filePath) {
		try {
			File file = new File(filePath);
			// 获取数据流
		    InputStream inputStream = new FileInputStream(file);

		    String newNm = newName(file.getName());
		    // 以文件形式上传Object
		    //PutObjectResponse putObjectFromFileResponse = client.putObject(bucketName, objectKey, file);
		    // 以数据流形式上传Object
		    PutObjectResponse result = client.putObject(bucketNm, newNm, inputStream);
		    // 以二进制串上传Object
		    //PutObjectResponse putObjectResponseFromByte = client.putObject(bucketName, objectKey, byte1);
		    // 以字符串上传Object
		    //PutObjectResponse putObjectResponseFromString = client.putObject(bucketName, objectKey, string1);

		    // 打印ETag
		    System.out.println(result.getETag());
		    
			return newNm;
		} catch (Exception e) {
			e.printStackTrace();
			//----------创建失败---------
			//已经有存在的bucket
			return null;
		}
	}
	/**
	 * 创建日期:2018/01/08<br/>
	 * 创建时间:15:53:19<br/>
	 * 创建用户:yellowcong<br/>
	 * 机能概要:删除bucket
	 * @param name
	 * @return
	 */
	public static boolean deleteBucket(String name) {
		try {
			//判断是否存在该bucket
			if(client.doesBucketExist(name)) {
				client.deleteBucket(name);
			}
			return true;
		} catch (Exception e) {
			e.printStackTrace();
			//----------创建失败---------
			//已经有存在的bucket
			return false;
		}
	}
	/**
	 * 创建日期:2018/01/08<br/>
	 * 创建时间:15:49:04<br/>
	 * 创建用户:yellowcong<br/>
	 * 机能概要:创建bucket
	 * @param name
	 */
	public static boolean createBucket(String name) {
		try {
			//创建bucket
			CreateBucketResponse result = client.createBucket(name);
			String str = result.getLocation();
			System.out.println(str);
			return true;
		} catch (Exception e) {
			e.printStackTrace();
			//----------创建失败---------
			//已经有存在的bucket
			return false;
		}
	}
	
	/**
	 * 创建日期:2018/01/08<br/>
	 * 创建时间:15:45:52<br/>
	 * 创建用户:yellowcong<br/>
	 * 机能概要:打印bucket信息
	 * @param client
	 */
	public static void printBucketInfo( ) {
		//获取bucket列表
		List<BucketSummary> bucketList = client.listBuckets().getBuckets();
			
		//遍历bucket 
		for(BucketSummary bucket:bucketList) {
			String name = bucket.getName();
			System.out.println(name);
		}
	}
	
}